In [1]:
    
!head -n 10 babynames/yob1994.txt
    
    
In [2]:
    
import pandas as pd
    
In [3]:
    
names1994 = pd.read_csv('babynames/yob1994.txt', names=['name', 'sex', 'births'])
    
In [4]:
    
names1994
    
    Out[4]:
  
    
       
      name 
      sex 
      births 
     
  
  
    
      0 
      Jessica 
      F 
      32117 
     
    
      1 
      Ashley 
      F 
      30278 
     
    
      2 
      Emily 
      F 
      24148 
     
    
      3 
      Samantha 
      F 
      22817 
     
    
      4 
      Sarah 
      F 
      22281 
     
    
      5 
      Taylor 
      F 
      20731 
     
    
      6 
      Brittany 
      F 
      18899 
     
    
      7 
      Amanda 
      F 
      18715 
     
    
      8 
      Elizabeth 
      F 
      16778 
     
    
      9 
      Megan 
      F 
      16578 
     
    
      10 
      Nicole 
      F 
      16011 
     
    
      11 
      Kayla 
      F 
      15885 
     
    
      12 
      Rachel 
      F 
      15484 
     
    
      13 
      Lauren 
      F 
      15153 
     
    
      14 
      Stephanie 
      F 
      14749 
     
    
      15 
      Hannah 
      F 
      14494 
     
    
      16 
      Jennifer 
      F 
      13997 
     
    
      17 
      Alexis 
      F 
      13035 
     
    
      18 
      Victoria 
      F 
      12690 
     
    
      19 
      Danielle 
      F 
      12448 
     
    
      20 
      Amber 
      F 
      12345 
     
    
      21 
      Courtney 
      F 
      12019 
     
    
      22 
      Jasmine 
      F 
      11711 
     
    
      23 
      Rebecca 
      F 
      11278 
     
    
      24 
      Morgan 
      F 
      10656 
     
    
      25 
      Alyssa 
      F 
      10602 
     
    
      26 
      Brianna 
      F 
      10517 
     
    
      27 
      Alexandra 
      F 
      10226 
     
    
      28 
      Kelsey 
      F 
      9752 
     
    
      29 
      Katherine 
      F 
      9585 
     
    
      ... 
      ... 
      ... 
      ... 
     
    
      25968 
      Yogi 
      M 
      5 
     
    
      25969 
      Yohanan 
      M 
      5 
     
    
      25970 
      Yomar 
      M 
      5 
     
    
      25971 
      Yordan 
      M 
      5 
     
    
      25972 
      Yordy 
      M 
      5 
     
    
      25973 
      Yoshihiro 
      M 
      5 
     
    
      25974 
      You 
      M 
      5 
     
    
      25975 
      Yutaro 
      M 
      5 
     
    
      25976 
      Yuval 
      M 
      5 
     
    
      25977 
      Yuya 
      M 
      5 
     
    
      25978 
      Yvette 
      M 
      5 
     
    
      25979 
      Zabdiel 
      M 
      5 
     
    
      25980 
      Zacaria 
      M 
      5 
     
    
      25981 
      Zacharay 
      M 
      5 
     
    
      25982 
      Zacherey 
      M 
      5 
     
    
      25983 
      Zackari 
      M 
      5 
     
    
      25984 
      Zacory 
      M 
      5 
     
    
      25985 
      Zahn 
      M 
      5 
     
    
      25986 
      Zakaree 
      M 
      5 
     
    
      25987 
      Zakarie 
      M 
      5 
     
    
      25988 
      Zakhary 
      M 
      5 
     
    
      25989 
      Zakory 
      M 
      5 
     
    
      25990 
      Zaron 
      M 
      5 
     
    
      25991 
      Zaven 
      M 
      5 
     
    
      25992 
      Zavius 
      M 
      5 
     
    
      25993 
      Zedric 
      M 
      5 
     
    
      25994 
      Zef 
      M 
      5 
     
    
      25995 
      Zoey 
      M 
      5 
     
    
      25996 
      Zong 
      M 
      5 
     
    
      25997 
      Zuhair 
      M 
      5 
     
  
25998 rows × 3 columns
In [14]:
    
years = range(1880, 2015)
    
In [15]:
    
pieces = []
    
In [16]:
    
columns = ['name', 'sex', 'births']
    
In [21]:
    
for year in years:
    path = 'babynames/yob%d.txt' % year
    frame = pd.read_csv(path, names=columns)
    
    frame['year'] = year
    pieces.append(frame)
    
In [22]:
    
names = pd.concat(pieces, ignore_index=True)
    
In [23]:
    
names
    
    Out[23]:
  
    
       
      name 
      sex 
      births 
      year 
     
  
  
    
      0 
      Emma 
      F 
      20886 
      2014 
     
    
      1 
      Olivia 
      F 
      19761 
      2014 
     
    
      2 
      Sophia 
      F 
      18563 
      2014 
     
    
      3 
      Isabella 
      F 
      17027 
      2014 
     
    
      4 
      Ava 
      F 
      15660 
      2014 
     
    
      5 
      Mia 
      F 
      13484 
      2014 
     
    
      6 
      Emily 
      F 
      12622 
      2014 
     
    
      7 
      Abigail 
      F 
      12049 
      2014 
     
    
      8 
      Madison 
      F 
      10291 
      2014 
     
    
      9 
      Charlotte 
      F 
      10094 
      2014 
     
    
      10 
      Harper 
      F 
      9601 
      2014 
     
    
      11 
      Sofia 
      F 
      9576 
      2014 
     
    
      12 
      Avery 
      F 
      9552 
      2014 
     
    
      13 
      Elizabeth 
      F 
      9537 
      2014 
     
    
      14 
      Amelia 
      F 
      8770 
      2014 
     
    
      15 
      Evelyn 
      F 
      8734 
      2014 
     
    
      16 
      Ella 
      F 
      8525 
      2014 
     
    
      17 
      Chloe 
      F 
      8507 
      2014 
     
    
      18 
      Victoria 
      F 
      7981 
      2014 
     
    
      19 
      Aubrey 
      F 
      7616 
      2014 
     
    
      20 
      Grace 
      F 
      7602 
      2014 
     
    
      21 
      Zoey 
      F 
      7384 
      2014 
     
    
      22 
      Natalie 
      F 
      7089 
      2014 
     
    
      23 
      Addison 
      F 
      6974 
      2014 
     
    
      24 
      Lillian 
      F 
      6898 
      2014 
     
    
      25 
      Brooklyn 
      F 
      6791 
      2014 
     
    
      26 
      Lily 
      F 
      6760 
      2014 
     
    
      27 
      Hannah 
      F 
      6551 
      2014 
     
    
      28 
      Layla 
      F 
      6442 
      2014 
     
    
      29 
      Scarlett 
      F 
      5994 
      2014 
     
    
      ... 
      ... 
      ... 
      ... 
      ... 
     
    
      1858883 
      Zeid 
      M 
      5 
      2014 
     
    
      1858884 
      Zeidan 
      M 
      5 
      2014 
     
    
      1858885 
      Zekeriah 
      M 
      5 
      2014 
     
    
      1858886 
      Zenas 
      M 
      5 
      2014 
     
    
      1858887 
      Zephen 
      M 
      5 
      2014 
     
    
      1858888 
      Zerick 
      M 
      5 
      2014 
     
    
      1858889 
      Zhaiden 
      M 
      5 
      2014 
     
    
      1858890 
      Zhalen 
      M 
      5 
      2014 
     
    
      1858891 
      Zhayden 
      M 
      5 
      2014 
     
    
      1858892 
      Ziar 
      M 
      5 
      2014 
     
    
      1858893 
      Zichen 
      M 
      5 
      2014 
     
    
      1858894 
      Ziden 
      M 
      5 
      2014 
     
    
      1858895 
      Zierre 
      M 
      5 
      2014 
     
    
      1858896 
      Ziion 
      M 
      5 
      2014 
     
    
      1858897 
      Zijun 
      M 
      5 
      2014 
     
    
      1858898 
      Zilas 
      M 
      5 
      2014 
     
    
      1858899 
      Zirui 
      M 
      5 
      2014 
     
    
      1858900 
      Zivon 
      M 
      5 
      2014 
     
    
      1858901 
      Ziyah 
      M 
      5 
      2014 
     
    
      1858902 
      Ziyang 
      M 
      5 
      2014 
     
    
      1858903 
      Zmarion 
      M 
      5 
      2014 
     
    
      1858904 
      Zo 
      M 
      5 
      2014 
     
    
      1858905 
      Zoraiz 
      M 
      5 
      2014 
     
    
      1858906 
      Zyeir 
      M 
      5 
      2014 
     
    
      1858907 
      Zyel 
      M 
      5 
      2014 
     
    
      1858908 
      Zykeem 
      M 
      5 
      2014 
     
    
      1858909 
      Zymeer 
      M 
      5 
      2014 
     
    
      1858910 
      Zymiere 
      M 
      5 
      2014 
     
    
      1858911 
      Zyran 
      M 
      5 
      2014 
     
    
      1858912 
      Zyrin 
      M 
      5 
      2014 
     
  
1858913 rows × 4 columns
In [25]:
    
total_births = names.pivot_table('births', index='year', columns='sex', aggfunc=sum)
    
In [26]:
    
total_births.tail()
    
    Out[26]:
  
    
      sex 
      F 
      M 
     
    
      year 
       
       
     
  
  
    
      2010 
      1773440 
      1914629 
     
    
      2011 
      1754424 
      1894262 
     
    
      2012 
      1755254 
      1890889 
     
    
      2013 
      1747544 
      1883945 
     
    
      2014 
      3554484 
      3821752 
     
  
In [27]:
    
def add_prop(group):
    births = group.births.astype(float)
    
    group['prop'] = births / births.sum()
    return group
    
In [28]:
    
names = names.groupby(['year', 'sex']).apply(add_prop)
    
In [29]:
    
names
    
    Out[29]:
  
    
       
      name 
      sex 
      births 
      year 
      prop 
     
  
  
    
      0 
      Emma 
      F 
      20886 
      2014 
      0.005876 
     
    
      1 
      Olivia 
      F 
      19761 
      2014 
      0.005559 
     
    
      2 
      Sophia 
      F 
      18563 
      2014 
      0.005222 
     
    
      3 
      Isabella 
      F 
      17027 
      2014 
      0.004790 
     
    
      4 
      Ava 
      F 
      15660 
      2014 
      0.004406 
     
    
      5 
      Mia 
      F 
      13484 
      2014 
      0.003794 
     
    
      6 
      Emily 
      F 
      12622 
      2014 
      0.003551 
     
    
      7 
      Abigail 
      F 
      12049 
      2014 
      0.003390 
     
    
      8 
      Madison 
      F 
      10291 
      2014 
      0.002895 
     
    
      9 
      Charlotte 
      F 
      10094 
      2014 
      0.002840 
     
    
      10 
      Harper 
      F 
      9601 
      2014 
      0.002701 
     
    
      11 
      Sofia 
      F 
      9576 
      2014 
      0.002694 
     
    
      12 
      Avery 
      F 
      9552 
      2014 
      0.002687 
     
    
      13 
      Elizabeth 
      F 
      9537 
      2014 
      0.002683 
     
    
      14 
      Amelia 
      F 
      8770 
      2014 
      0.002467 
     
    
      15 
      Evelyn 
      F 
      8734 
      2014 
      0.002457 
     
    
      16 
      Ella 
      F 
      8525 
      2014 
      0.002398 
     
    
      17 
      Chloe 
      F 
      8507 
      2014 
      0.002393 
     
    
      18 
      Victoria 
      F 
      7981 
      2014 
      0.002245 
     
    
      19 
      Aubrey 
      F 
      7616 
      2014 
      0.002143 
     
    
      20 
      Grace 
      F 
      7602 
      2014 
      0.002139 
     
    
      21 
      Zoey 
      F 
      7384 
      2014 
      0.002077 
     
    
      22 
      Natalie 
      F 
      7089 
      2014 
      0.001994 
     
    
      23 
      Addison 
      F 
      6974 
      2014 
      0.001962 
     
    
      24 
      Lillian 
      F 
      6898 
      2014 
      0.001941 
     
    
      25 
      Brooklyn 
      F 
      6791 
      2014 
      0.001911 
     
    
      26 
      Lily 
      F 
      6760 
      2014 
      0.001902 
     
    
      27 
      Hannah 
      F 
      6551 
      2014 
      0.001843 
     
    
      28 
      Layla 
      F 
      6442 
      2014 
      0.001812 
     
    
      29 
      Scarlett 
      F 
      5994 
      2014 
      0.001686 
     
    
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
     
    
      1858883 
      Zeid 
      M 
      5 
      2014 
      0.000001 
     
    
      1858884 
      Zeidan 
      M 
      5 
      2014 
      0.000001 
     
    
      1858885 
      Zekeriah 
      M 
      5 
      2014 
      0.000001 
     
    
      1858886 
      Zenas 
      M 
      5 
      2014 
      0.000001 
     
    
      1858887 
      Zephen 
      M 
      5 
      2014 
      0.000001 
     
    
      1858888 
      Zerick 
      M 
      5 
      2014 
      0.000001 
     
    
      1858889 
      Zhaiden 
      M 
      5 
      2014 
      0.000001 
     
    
      1858890 
      Zhalen 
      M 
      5 
      2014 
      0.000001 
     
    
      1858891 
      Zhayden 
      M 
      5 
      2014 
      0.000001 
     
    
      1858892 
      Ziar 
      M 
      5 
      2014 
      0.000001 
     
    
      1858893 
      Zichen 
      M 
      5 
      2014 
      0.000001 
     
    
      1858894 
      Ziden 
      M 
      5 
      2014 
      0.000001 
     
    
      1858895 
      Zierre 
      M 
      5 
      2014 
      0.000001 
     
    
      1858896 
      Ziion 
      M 
      5 
      2014 
      0.000001 
     
    
      1858897 
      Zijun 
      M 
      5 
      2014 
      0.000001 
     
    
      1858898 
      Zilas 
      M 
      5 
      2014 
      0.000001 
     
    
      1858899 
      Zirui 
      M 
      5 
      2014 
      0.000001 
     
    
      1858900 
      Zivon 
      M 
      5 
      2014 
      0.000001 
     
    
      1858901 
      Ziyah 
      M 
      5 
      2014 
      0.000001 
     
    
      1858902 
      Ziyang 
      M 
      5 
      2014 
      0.000001 
     
    
      1858903 
      Zmarion 
      M 
      5 
      2014 
      0.000001 
     
    
      1858904 
      Zo 
      M 
      5 
      2014 
      0.000001 
     
    
      1858905 
      Zoraiz 
      M 
      5 
      2014 
      0.000001 
     
    
      1858906 
      Zyeir 
      M 
      5 
      2014 
      0.000001 
     
    
      1858907 
      Zyel 
      M 
      5 
      2014 
      0.000001 
     
    
      1858908 
      Zykeem 
      M 
      5 
      2014 
      0.000001 
     
    
      1858909 
      Zymeer 
      M 
      5 
      2014 
      0.000001 
     
    
      1858910 
      Zymiere 
      M 
      5 
      2014 
      0.000001 
     
    
      1858911 
      Zyran 
      M 
      5 
      2014 
      0.000001 
     
    
      1858912 
      Zyrin 
      M 
      5 
      2014 
      0.000001 
     
  
1858913 rows × 5 columns
In [31]:
    
import numpy as np
    
In [32]:
    
np.allclose(names.groupby(['year', 'sex']).prop.sum(), 1)
    
    Out[32]:
True
In [36]:
    
def get_top1000(group):
    return group.sort_values(by='births', ascending=False)[:1000]
    
In [37]:
    
grouped = names.groupby(['year', 'sex'])
    
In [38]:
    
top1000 = grouped.apply(get_top1000)
    
In [39]:
    
top1000
    
    Out[39]:
  
    
       
       
       
      name 
      sex 
      births 
      year 
      prop 
     
    
      year 
      sex 
       
       
       
       
       
       
     
  
  
    
      1880 
      F 
      33176 
      Mary 
      F 
      7065 
      1880 
      0.077644 
     
    
      33177 
      Anna 
      F 
      2604 
      1880 
      0.028618 
     
    
      33178 
      Emma 
      F 
      2003 
      1880 
      0.022013 
     
    
      33179 
      Elizabeth 
      F 
      1939 
      1880 
      0.021310 
     
    
      33180 
      Minnie 
      F 
      1746 
      1880 
      0.019189 
     
    
      33181 
      Margaret 
      F 
      1578 
      1880 
      0.017342 
     
    
      33182 
      Ida 
      F 
      1472 
      1880 
      0.016177 
     
    
      33183 
      Alice 
      F 
      1414 
      1880 
      0.015540 
     
    
      33184 
      Bertha 
      F 
      1320 
      1880 
      0.014507 
     
    
      33185 
      Sarah 
      F 
      1288 
      1880 
      0.014155 
     
    
      33186 
      Annie 
      F 
      1258 
      1880 
      0.013825 
     
    
      33187 
      Clara 
      F 
      1226 
      1880 
      0.013474 
     
    
      33188 
      Ella 
      F 
      1156 
      1880 
      0.012704 
     
    
      33189 
      Florence 
      F 
      1063 
      1880 
      0.011682 
     
    
      33190 
      Cora 
      F 
      1045 
      1880 
      0.011485 
     
    
      33191 
      Martha 
      F 
      1040 
      1880 
      0.011430 
     
    
      33192 
      Laura 
      F 
      1012 
      1880 
      0.011122 
     
    
      33193 
      Nellie 
      F 
      995 
      1880 
      0.010935 
     
    
      33194 
      Grace 
      F 
      982 
      1880 
      0.010792 
     
    
      33195 
      Carrie 
      F 
      949 
      1880 
      0.010429 
     
    
      33196 
      Maude 
      F 
      858 
      1880 
      0.009429 
     
    
      33197 
      Mabel 
      F 
      808 
      1880 
      0.008880 
     
    
      33198 
      Bessie 
      F 
      796 
      1880 
      0.008748 
     
    
      33199 
      Jennie 
      F 
      793 
      1880 
      0.008715 
     
    
      33200 
      Gertrude 
      F 
      787 
      1880 
      0.008649 
     
    
      33201 
      Julia 
      F 
      783 
      1880 
      0.008605 
     
    
      33202 
      Hattie 
      F 
      769 
      1880 
      0.008451 
     
    
      33203 
      Edith 
      F 
      768 
      1880 
      0.008440 
     
    
      33204 
      Mattie 
      F 
      704 
      1880 
      0.007737 
     
    
      33205 
      Rose 
      F 
      700 
      1880 
      0.007693 
     
    
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
     
    
      2014 
      M 
      19635 
      Lawson 
      M 
      576 
      2014 
      0.000151 
     
    
      1845372 
      Lawson 
      M 
      576 
      2014 
      0.000151 
     
    
      19636 
      Rodrigo 
      M 
      575 
      2014 
      0.000150 
     
    
      1845373 
      Rodrigo 
      M 
      575 
      2014 
      0.000150 
     
    
      19638 
      Harvey 
      M 
      574 
      2014 
      0.000150 
     
    
      19637 
      Beckham 
      M 
      574 
      2014 
      0.000150 
     
    
      1845374 
      Beckham 
      M 
      574 
      2014 
      0.000150 
     
    
      1845375 
      Harvey 
      M 
      574 
      2014 
      0.000150 
     
    
      19639 
      Dennis 
      M 
      573 
      2014 
      0.000150 
     
    
      1845376 
      Dennis 
      M 
      573 
      2014 
      0.000150 
     
    
      19640 
      Uriel 
      M 
      573 
      2014 
      0.000150 
     
    
      1845377 
      Uriel 
      M 
      573 
      2014 
      0.000150 
     
    
      1845378 
      Armani 
      M 
      570 
      2014 
      0.000149 
     
    
      19641 
      Armani 
      M 
      570 
      2014 
      0.000149 
     
    
      1845379 
      Marvin 
      M 
      568 
      2014 
      0.000149 
     
    
      19642 
      Marvin 
      M 
      568 
      2014 
      0.000149 
     
    
      1845380 
      Frederick 
      M 
      566 
      2014 
      0.000148 
     
    
      19643 
      Frederick 
      M 
      566 
      2014 
      0.000148 
     
    
      1845381 
      Kian 
      M 
      566 
      2014 
      0.000148 
     
    
      19644 
      Kian 
      M 
      566 
      2014 
      0.000148 
     
    
      19645 
      Darren 
      M 
      565 
      2014 
      0.000148 
     
    
      19646 
      Mohammed 
      M 
      565 
      2014 
      0.000148 
     
    
      19647 
      Raylan 
      M 
      565 
      2014 
      0.000148 
     
    
      1845384 
      Raylan 
      M 
      565 
      2014 
      0.000148 
     
    
      1845382 
      Darren 
      M 
      565 
      2014 
      0.000148 
     
    
      1845383 
      Mohammed 
      M 
      565 
      2014 
      0.000148 
     
    
      1845385 
      Trent 
      M 
      563 
      2014 
      0.000147 
     
    
      19648 
      Trent 
      M 
      563 
      2014 
      0.000147 
     
    
      19649 
      Callen 
      M 
      561 
      2014 
      0.000147 
     
    
      1845386 
      Callen 
      M 
      561 
      2014 
      0.000147 
     
  
269877 rows × 5 columns
In [40]:
    
boys = top1000[top1000.sex == 'M']
    
In [41]:
    
girls = top1000[top1000.sex == 'F']
    
In [42]:
    
total_births = top1000.pivot_table('births', index='year', columns='name', aggfunc=sum)
    
In [43]:
    
total_births
    
    Out[43]:
  
    
      name 
      Aaden 
      Aaliyah 
      Aarav 
      Aaron 
      Aarush 
      Ab 
      Abagail 
      Abb 
      Abbey 
      Abbie 
      ... 
      Zoa 
      Zoe 
      Zoey 
      Zoie 
      Zola 
      Zollie 
      Zona 
      Zora 
      Zula 
      Zuri 
     
    
      year 
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
     
  
  
    
      1880 
      NaN 
      NaN 
      NaN 
      102.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      71.0 
      ... 
      8.0 
      23.0 
      NaN 
      NaN 
      7.0 
      NaN 
      8.0 
      28.0 
      27.0 
      NaN 
     
    
      1881 
      NaN 
      NaN 
      NaN 
      94.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      81.0 
      ... 
      NaN 
      22.0 
      NaN 
      NaN 
      10.0 
      NaN 
      9.0 
      21.0 
      27.0 
      NaN 
     
    
      1882 
      NaN 
      NaN 
      NaN 
      85.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      80.0 
      ... 
      8.0 
      25.0 
      NaN 
      NaN 
      9.0 
      NaN 
      17.0 
      32.0 
      21.0 
      NaN 
     
    
      1883 
      NaN 
      NaN 
      NaN 
      105.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      79.0 
      ... 
      NaN 
      23.0 
      NaN 
      NaN 
      10.0 
      NaN 
      11.0 
      35.0 
      25.0 
      NaN 
     
    
      1884 
      NaN 
      NaN 
      NaN 
      97.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      98.0 
      ... 
      13.0 
      31.0 
      NaN 
      NaN 
      14.0 
      6.0 
      8.0 
      58.0 
      27.0 
      NaN 
     
    
      1885 
      NaN 
      NaN 
      NaN 
      88.0 
      NaN 
      6.0 
      NaN 
      NaN 
      NaN 
      88.0 
      ... 
      6.0 
      27.0 
      NaN 
      NaN 
      12.0 
      6.0 
      14.0 
      48.0 
      38.0 
      NaN 
     
    
      1886 
      NaN 
      NaN 
      NaN 
      86.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      84.0 
      ... 
      13.0 
      25.0 
      NaN 
      NaN 
      8.0 
      NaN 
      20.0 
      52.0 
      43.0 
      NaN 
     
    
      1887 
      NaN 
      NaN 
      NaN 
      78.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      104.0 
      ... 
      9.0 
      34.0 
      NaN 
      NaN 
      23.0 
      NaN 
      28.0 
      46.0 
      33.0 
      NaN 
     
    
      1888 
      NaN 
      NaN 
      NaN 
      90.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      137.0 
      ... 
      11.0 
      42.0 
      NaN 
      NaN 
      23.0 
      7.0 
      30.0 
      42.0 
      45.0 
      NaN 
     
    
      1889 
      NaN 
      NaN 
      NaN 
      85.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      107.0 
      ... 
      14.0 
      29.0 
      NaN 
      NaN 
      22.0 
      NaN 
      29.0 
      53.0 
      55.0 
      NaN 
     
    
      1890 
      NaN 
      NaN 
      NaN 
      96.0 
      NaN 
      NaN 
      NaN 
      6.0 
      NaN 
      140.0 
      ... 
      NaN 
      42.0 
      NaN 
      NaN 
      32.0 
      7.0 
      27.0 
      60.0 
      65.0 
      NaN 
     
    
      1891 
      NaN 
      NaN 
      NaN 
      69.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      124.0 
      ... 
      NaN 
      34.0 
      NaN 
      NaN 
      29.0 
      6.0 
      14.0 
      52.0 
      45.0 
      NaN 
     
    
      1892 
      NaN 
      NaN 
      NaN 
      95.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      119.0 
      ... 
      NaN 
      34.0 
      NaN 
      NaN 
      27.0 
      NaN 
      25.0 
      66.0 
      53.0 
      NaN 
     
    
      1893 
      NaN 
      NaN 
      NaN 
      81.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      115.0 
      ... 
      NaN 
      23.0 
      NaN 
      NaN 
      34.0 
      6.0 
      15.0 
      67.0 
      70.0 
      NaN 
     
    
      1894 
      NaN 
      NaN 
      NaN 
      79.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      118.0 
      ... 
      NaN 
      28.0 
      NaN 
      NaN 
      51.0 
      NaN 
      23.0 
      66.0 
      64.0 
      NaN 
     
    
      1895 
      NaN 
      NaN 
      NaN 
      94.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      92.0 
      ... 
      NaN 
      34.0 
      NaN 
      NaN 
      60.0 
      11.0 
      38.0 
      55.0 
      55.0 
      NaN 
     
    
      1896 
      NaN 
      NaN 
      NaN 
      69.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      121.0 
      ... 
      NaN 
      36.0 
      NaN 
      NaN 
      47.0 
      NaN 
      38.0 
      72.0 
      65.0 
      NaN 
     
    
      1897 
      NaN 
      NaN 
      NaN 
      87.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      97.0 
      ... 
      NaN 
      35.0 
      NaN 
      NaN 
      51.0 
      NaN 
      28.0 
      67.0 
      79.0 
      NaN 
     
    
      1898 
      NaN 
      NaN 
      NaN 
      89.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      120.0 
      ... 
      NaN 
      30.0 
      NaN 
      NaN 
      62.0 
      NaN 
      28.0 
      65.0 
      83.0 
      NaN 
     
    
      1899 
      NaN 
      NaN 
      NaN 
      71.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      87.0 
      ... 
      NaN 
      27.0 
      NaN 
      NaN 
      49.0 
      6.0 
      31.0 
      56.0 
      60.0 
      NaN 
     
    
      1900 
      NaN 
      NaN 
      NaN 
      103.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      112.0 
      ... 
      NaN 
      26.0 
      NaN 
      NaN 
      48.0 
      9.0 
      44.0 
      99.0 
      71.0 
      NaN 
     
    
      1901 
      NaN 
      NaN 
      NaN 
      80.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      87.0 
      ... 
      NaN 
      26.0 
      NaN 
      NaN 
      56.0 
      NaN 
      31.0 
      58.0 
      57.0 
      NaN 
     
    
      1902 
      NaN 
      NaN 
      NaN 
      78.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      91.0 
      ... 
      NaN 
      34.0 
      NaN 
      NaN 
      58.0 
      NaN 
      23.0 
      58.0 
      66.0 
      NaN 
     
    
      1903 
      NaN 
      NaN 
      NaN 
      93.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      91.0 
      ... 
      NaN 
      19.0 
      NaN 
      NaN 
      64.0 
      NaN 
      41.0 
      83.0 
      74.0 
      NaN 
     
    
      1904 
      NaN 
      NaN 
      NaN 
      117.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      80.0 
      ... 
      NaN 
      27.0 
      NaN 
      NaN 
      46.0 
      NaN 
      35.0 
      54.0 
      74.0 
      NaN 
     
    
      1905 
      NaN 
      NaN 
      NaN 
      96.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      73.0 
      ... 
      NaN 
      24.0 
      NaN 
      NaN 
      66.0 
      8.0 
      24.0 
      55.0 
      61.0 
      NaN 
     
    
      1906 
      NaN 
      NaN 
      NaN 
      96.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      72.0 
      ... 
      NaN 
      19.0 
      NaN 
      NaN 
      59.0 
      NaN 
      37.0 
      64.0 
      58.0 
      NaN 
     
    
      1907 
      NaN 
      NaN 
      NaN 
      130.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      79.0 
      ... 
      NaN 
      19.0 
      NaN 
      NaN 
      53.0 
      11.0 
      39.0 
      92.0 
      72.0 
      NaN 
     
    
      1908 
      NaN 
      NaN 
      NaN 
      114.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      84.0 
      ... 
      NaN 
      23.0 
      NaN 
      NaN 
      70.0 
      NaN 
      31.0 
      59.0 
      53.0 
      NaN 
     
    
      1909 
      NaN 
      NaN 
      NaN 
      142.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      57.0 
      ... 
      NaN 
      22.0 
      NaN 
      NaN 
      59.0 
      NaN 
      39.0 
      57.0 
      76.0 
      NaN 
     
    
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
     
    
      1985 
      NaN 
      NaN 
      NaN 
      13134.0 
      NaN 
      NaN 
      NaN 
      NaN 
      314.0 
      233.0 
      ... 
      NaN 
      194.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
     
    
      1986 
      NaN 
      NaN 
      NaN 
      12690.0 
      NaN 
      NaN 
      NaN 
      NaN 
      370.0 
      228.0 
      ... 
      NaN 
      213.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
     
    
      1987 
      NaN 
      NaN 
      NaN 
      12678.0 
      NaN 
      NaN 
      NaN 
      NaN 
      327.0 
      228.0 
      ... 
      NaN 
      247.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
     
    
      1988 
      NaN 
      NaN 
      NaN 
      14397.0 
      NaN 
      NaN 
      NaN 
      NaN 
      404.0 
      226.0 
      ... 
      NaN 
      241.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
     
    
      1989 
      NaN 
      NaN 
      NaN 
      15314.0 
      NaN 
      NaN 
      NaN 
      NaN 
      470.0 
      265.0 
      ... 
      NaN 
      376.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
     
    
      1990 
      NaN 
      NaN 
      NaN 
      14550.0 
      NaN 
      NaN 
      NaN 
      NaN 
      507.0 
      313.0 
      ... 
      NaN 
      478.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
     
    
      1991 
      NaN 
      NaN 
      NaN 
      14240.0 
      NaN 
      NaN 
      NaN 
      NaN 
      451.0 
      276.0 
      ... 
      NaN 
      722.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
     
    
      1992 
      NaN 
      NaN 
      NaN 
      14506.0 
      NaN 
      NaN 
      NaN 
      NaN 
      430.0 
      260.0 
      ... 
      NaN 
      981.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
     
    
      1993 
      NaN 
      NaN 
      NaN 
      13825.0 
      NaN 
      NaN 
      NaN 
      NaN 
      503.0 
      292.0 
      ... 
      NaN 
      1193.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
     
    
      1994 
      NaN 
      1451.0 
      NaN 
      14380.0 
      NaN 
      NaN 
      NaN 
      NaN 
      597.0 
      351.0 
      ... 
      NaN 
      1333.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
     
    
      1995 
      NaN 
      1255.0 
      NaN 
      13286.0 
      NaN 
      NaN 
      NaN 
      NaN 
      549.0 
      351.0 
      ... 
      NaN 
      1726.0 
      219.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
     
    
      1996 
      NaN 
      831.0 
      NaN 
      11969.0 
      NaN 
      NaN 
      NaN 
      NaN 
      552.0 
      349.0 
      ... 
      NaN 
      2064.0 
      339.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
     
    
      1997 
      NaN 
      1738.0 
      NaN 
      11166.0 
      NaN 
      NaN 
      NaN 
      NaN 
      645.0 
      386.0 
      ... 
      NaN 
      2362.0 
      407.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
     
    
      1998 
      NaN 
      1399.0 
      NaN 
      10544.0 
      NaN 
      NaN 
      NaN 
      NaN 
      661.0 
      398.0 
      ... 
      NaN 
      2692.0 
      478.0 
      225.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
     
    
      1999 
      NaN 
      1088.0 
      NaN 
      9852.0 
      NaN 
      NaN 
      211.0 
      NaN 
      710.0 
      430.0 
      ... 
      NaN 
      3237.0 
      563.0 
      257.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
     
    
      2000 
      NaN 
      1495.0 
      NaN 
      9551.0 
      NaN 
      NaN 
      222.0 
      NaN 
      660.0 
      432.0 
      ... 
      NaN 
      3785.0 
      691.0 
      320.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
     
    
      2001 
      NaN 
      3352.0 
      NaN 
      9534.0 
      NaN 
      NaN 
      244.0 
      NaN 
      687.0 
      526.0 
      ... 
      NaN 
      4644.0 
      822.0 
      439.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
     
    
      2002 
      NaN 
      4778.0 
      NaN 
      8999.0 
      NaN 
      NaN 
      256.0 
      NaN 
      600.0 
      514.0 
      ... 
      NaN 
      4884.0 
      1182.0 
      438.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
     
    
      2003 
      NaN 
      3671.0 
      NaN 
      8859.0 
      NaN 
      NaN 
      276.0 
      NaN 
      625.0 
      536.0 
      ... 
      NaN 
      5085.0 
      1469.0 
      449.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
     
    
      2004 
      NaN 
      3486.0 
      NaN 
      8386.0 
      NaN 
      NaN 
      258.0 
      NaN 
      504.0 
      500.0 
      ... 
      NaN 
      5362.0 
      1622.0 
      515.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
     
    
      2005 
      NaN 
      3456.0 
      NaN 
      7799.0 
      NaN 
      NaN 
      287.0 
      NaN 
      452.0 
      445.0 
      ... 
      NaN 
      4957.0 
      2270.0 
      502.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
     
    
      2006 
      NaN 
      3742.0 
      NaN 
      8291.0 
      NaN 
      NaN 
      298.0 
      NaN 
      404.0 
      440.0 
      ... 
      NaN 
      5152.0 
      2848.0 
      531.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
     
    
      2007 
      NaN 
      3952.0 
      NaN 
      8933.0 
      NaN 
      NaN 
      313.0 
      NaN 
      349.0 
      468.0 
      ... 
      NaN 
      4931.0 
      3031.0 
      527.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
     
    
      2008 
      956.0 
      4038.0 
      219.0 
      8536.0 
      NaN 
      NaN 
      320.0 
      NaN 
      344.0 
      401.0 
      ... 
      NaN 
      4779.0 
      3445.0 
      493.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
     
    
      2009 
      1267.0 
      4366.0 
      270.0 
      7966.0 
      NaN 
      NaN 
      297.0 
      NaN 
      307.0 
      370.0 
      ... 
      NaN 
      5144.0 
      3991.0 
      499.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
     
    
      2010 
      450.0 
      4659.0 
      438.0 
      7458.0 
      227.0 
      NaN 
      281.0 
      NaN 
      299.0 
      327.0 
      ... 
      NaN 
      6263.0 
      5200.0 
      508.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      259.0 
     
    
      2011 
      274.0 
      5105.0 
      436.0 
      7610.0 
      NaN 
      NaN 
      NaN 
      NaN 
      287.0 
      339.0 
      ... 
      NaN 
      6294.0 
      6394.0 
      523.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      313.0 
     
    
      2012 
      223.0 
      5499.0 
      435.0 
      7519.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      342.0 
      ... 
      NaN 
      6445.0 
      7457.0 
      516.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      434.0 
     
    
      2013 
      203.0 
      5217.0 
      495.0 
      7289.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      ... 
      NaN 
      5967.0 
      7224.0 
      431.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      566.0 
     
    
      2014 
      NaN 
      9742.0 
      NaN 
      14736.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      ... 
      NaN 
      11714.0 
      14768.0 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      NaN 
      1328.0 
     
  
135 rows × 6994 columns
In [48]:
    
%matplotlib notebook
import matplotlib
import matplotlib.pyplot as plt
    
In [54]:
    
subset = total_births[['Victor', 'Harry', 'Mary', 'Marilyn']]
    
In [52]:
    
subset.plot(subplots=True, figsize=(12, 10), grid=False, title="Number of births per year")
    
    
    
 
    Out[52]:
array([<matplotlib.axes._subplots.AxesSubplot object at 0x7f08dacdf110>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x7f08aa4d3790>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x7f08aa4a9690>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x7f08aa3cd210>], dtype=object)
In [55]:
    
table = top1000.pivot_table('prop', index='year', columns='sex', aggfunc=sum)
    
In [57]:
    
table.plot(title='Sum of table1000.prop by year and sex', yticks=np.linspace(0, 1.2, 13), xticks=range(1880, 2020, 10))
    
    
    
 
    Out[57]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f08aa1cef50>
In [58]:
    
df = boys[boys.year == 2010]
    
In [59]:
    
df
    
    Out[59]:
  
    
       
       
       
      name 
      sex 
      births 
      year 
      prop 
     
    
      year 
      sex 
       
       
       
       
       
       
     
  
  
    
      2010 
      M 
      1710685 
      Jacob 
      M 
      22095 
      2010 
      0.011540 
     
    
      1710686 
      Ethan 
      M 
      17993 
      2010 
      0.009398 
     
    
      1710687 
      Michael 
      M 
      17324 
      2010 
      0.009048 
     
    
      1710688 
      Jayden 
      M 
      17158 
      2010 
      0.008962 
     
    
      1710689 
      William 
      M 
      17036 
      2010 
      0.008898 
     
    
      1710690 
      Alexander 
      M 
      16746 
      2010 
      0.008746 
     
    
      1710691 
      Noah 
      M 
      16438 
      2010 
      0.008585 
     
    
      1710692 
      Daniel 
      M 
      15819 
      2010 
      0.008262 
     
    
      1710693 
      Aiden 
      M 
      15520 
      2010 
      0.008106 
     
    
      1710694 
      Anthony 
      M 
      15475 
      2010 
      0.008083 
     
    
      1710695 
      Joshua 
      M 
      15425 
      2010 
      0.008056 
     
    
      1710696 
      Mason 
      M 
      14836 
      2010 
      0.007749 
     
    
      1710697 
      Christopher 
      M 
      14259 
      2010 
      0.007447 
     
    
      1710698 
      Andrew 
      M 
      14227 
      2010 
      0.007431 
     
    
      1710699 
      David 
      M 
      14176 
      2010 
      0.007404 
     
    
      1710700 
      Matthew 
      M 
      14114 
      2010 
      0.007372 
     
    
      1710701 
      Logan 
      M 
      14014 
      2010 
      0.007319 
     
    
      1710702 
      Elijah 
      M 
      13875 
      2010 
      0.007247 
     
    
      1710703 
      James 
      M 
      13861 
      2010 
      0.007240 
     
    
      1710704 
      Joseph 
      M 
      13806 
      2010 
      0.007211 
     
    
      1710705 
      Gabriel 
      M 
      12859 
      2010 
      0.006716 
     
    
      1710706 
      Benjamin 
      M 
      12421 
      2010 
      0.006487 
     
    
      1710707 
      Ryan 
      M 
      11964 
      2010 
      0.006249 
     
    
      1710708 
      Samuel 
      M 
      11948 
      2010 
      0.006240 
     
    
      1710709 
      Jackson 
      M 
      11812 
      2010 
      0.006169 
     
    
      1710710 
      John 
      M 
      11543 
      2010 
      0.006029 
     
    
      1710711 
      Nathan 
      M 
      11367 
      2010 
      0.005937 
     
    
      1710712 
      Jonathan 
      M 
      11113 
      2010 
      0.005804 
     
    
      1710713 
      Christian 
      M 
      11084 
      2010 
      0.005789 
     
    
      1710714 
      Liam 
      M 
      10924 
      2010 
      0.005706 
     
    
      ... 
      ... 
      ... 
      ... 
      ... 
      ... 
     
    
      ... 
      Ronaldo 
      M 
      203 
      2010 
      0.000106 
     
    
      1711656 
      Yair 
      M 
      203 
      2010 
      0.000106 
     
    
      1711657 
      Kael 
      M 
      203 
      2010 
      0.000106 
     
    
      1711654 
      Gibson 
      M 
      202 
      2010 
      0.000106 
     
    
      1711658 
      Keyon 
      M 
      202 
      2010 
      0.000106 
     
    
      1711659 
      Reagan 
      M 
      202 
      2010 
      0.000106 
     
    
      1711660 
      Kingsley 
      M 
      201 
      2010 
      0.000105 
     
    
      1711661 
      Talan 
      M 
      201 
      2010 
      0.000105 
     
    
      1711662 
      Yehuda 
      M 
      201 
      2010 
      0.000105 
     
    
      1711663 
      Jordon 
      M 
      200 
      2010 
      0.000104 
     
    
      1711667 
      Slade 
      M 
      200 
      2010 
      0.000104 
     
    
      1711669 
      Sheldon 
      M 
      200 
      2010 
      0.000104 
     
    
      1711668 
      Daylen 
      M 
      200 
      2010 
      0.000104 
     
    
      1711666 
      Dashawn 
      M 
      200 
      2010 
      0.000104 
     
    
      1711665 
      Cristofer 
      M 
      200 
      2010 
      0.000104 
     
    
      1711664 
      Clarence 
      M 
      199 
      2010 
      0.000104 
     
    
      1711670 
      Kadin 
      M 
      199 
      2010 
      0.000104 
     
    
      1711671 
      Masen 
      M 
      199 
      2010 
      0.000104 
     
    
      1711672 
      Rowen 
      M 
      199 
      2010 
      0.000104 
     
    
      1711673 
      Clinton 
      M 
      198 
      2010 
      0.000103 
     
    
      1711674 
      Dillan 
      M 
      198 
      2010 
      0.000103 
     
    
      1711675 
      Thaddeus 
      M 
      198 
      2010 
      0.000103 
     
    
      1711676 
      Yousef 
      M 
      198 
      2010 
      0.000103 
     
    
      1711677 
      Truman 
      M 
      197 
      2010 
      0.000103 
     
    
      1711678 
      Joziah 
      M 
      196 
      2010 
      0.000102 
     
    
      1711683 
      Simeon 
      M 
      196 
      2010 
      0.000102 
     
    
      1711686 
      Reuben 
      M 
      196 
      2010 
      0.000102 
     
    
      1711685 
      Keshawn 
      M 
      196 
      2010 
      0.000102 
     
    
      1711684 
      Destin 
      M 
      196 
      2010 
      0.000102 
     
    
      1711680 
      Enoch 
      M 
      196 
      2010 
      0.000102 
     
  
1000 rows × 5 columns
In [60]:
    
prop_cumsum = df.sort_values(by='prop', ascending=False).prop.cumsum()
    
In [61]:
    
prop_cumsum[:10]
    
    Out[61]:
year  sex         
2010  M    1710685    0.011540
           1710686    0.020938
           1710687    0.029986
           1710688    0.038947
           1710689    0.047845
           1710690    0.056592
           1710691    0.065177
           1710692    0.073439
           1710693    0.081545
           1710694    0.089628
Name: prop, dtype: float64
In [62]:
    
df = boys[boys.year == 1900]
    
In [64]:
    
in1900 = df.sort_values(by='prop', ascending=False).prop.cumsum()
    
In [65]:
    
in1900.searchsorted(0.5) + 1
    
    Out[65]:
array([25])
In [68]:
    
def get_quantile_count(group, q=0.5):
    group = group.sort_values(by='prop', ascending=False)
    return group.prop.cumsum().searchsorted(q) + 1
    
In [69]:
    
diversity = top1000.groupby(['year', 'sex']).apply(get_quantile_count)
    
In [70]:
    
diversity = diversity.unstack('sex')
    
In [74]:
    
diversity
    
    Out[74]:
  
    
      sex 
      F 
      M 
     
    
      year 
       
       
     
  
  
    
      1880 
      [38] 
      [14] 
     
    
      1881 
      [38] 
      [14] 
     
    
      1882 
      [38] 
      [15] 
     
    
      1883 
      [39] 
      [15] 
     
    
      1884 
      [39] 
      [16] 
     
    
      1885 
      [40] 
      [16] 
     
    
      1886 
      [41] 
      [16] 
     
    
      1887 
      [41] 
      [17] 
     
    
      1888 
      [42] 
      [17] 
     
    
      1889 
      [43] 
      [18] 
     
    
      1890 
      [44] 
      [19] 
     
    
      1891 
      [44] 
      [20] 
     
    
      1892 
      [44] 
      [20] 
     
    
      1893 
      [44] 
      [21] 
     
    
      1894 
      [45] 
      [22] 
     
    
      1895 
      [46] 
      [22] 
     
    
      1896 
      [46] 
      [23] 
     
    
      1897 
      [46] 
      [23] 
     
    
      1898 
      [47] 
      [24] 
     
    
      1899 
      [47] 
      [25] 
     
    
      1900 
      [49] 
      [25] 
     
    
      1901 
      [49] 
      [25] 
     
    
      1902 
      [49] 
      [26] 
     
    
      1903 
      [49] 
      [27] 
     
    
      1904 
      [50] 
      [28] 
     
    
      1905 
      [50] 
      [28] 
     
    
      1906 
      [49] 
      [28] 
     
    
      1907 
      [50] 
      [30] 
     
    
      1908 
      [49] 
      [30] 
     
    
      1909 
      [49] 
      [30] 
     
    
      ... 
      ... 
      ... 
     
    
      1985 
      [72] 
      [36] 
     
    
      1986 
      [74] 
      [38] 
     
    
      1987 
      [75] 
      [39] 
     
    
      1988 
      [78] 
      [40] 
     
    
      1989 
      [83] 
      [43] 
     
    
      1990 
      [90] 
      [45] 
     
    
      1991 
      [95] 
      [48] 
     
    
      1992 
      [102] 
      [51] 
     
    
      1993 
      [107] 
      [54] 
     
    
      1994 
      [112] 
      [57] 
     
    
      1995 
      [115] 
      [60] 
     
    
      1996 
      [122] 
      [64] 
     
    
      1997 
      [129] 
      [67] 
     
    
      1998 
      [138] 
      [70] 
     
    
      1999 
      [146] 
      [73] 
     
    
      2000 
      [155] 
      [77] 
     
    
      2001 
      [165] 
      [81] 
     
    
      2002 
      [170] 
      [83] 
     
    
      2003 
      [179] 
      [87] 
     
    
      2004 
      [191] 
      [92] 
     
    
      2005 
      [199] 
      [96] 
     
    
      2006 
      [209] 
      [99] 
     
    
      2007 
      [223] 
      [103] 
     
    
      2008 
      [234] 
      [109] 
     
    
      2009 
      [241] 
      [114] 
     
    
      2010 
      [246] 
      [117] 
     
    
      2011 
      [244] 
      [120] 
     
    
      2012 
      [248] 
      [124] 
     
    
      2013 
      [241] 
      [126] 
     
    
      2014 
      [483] 
      [262] 
     
  
135 rows × 2 columns
In [80]:
    
diversity[['F', 'M']] = diversity[['F', 'M']].astype(int)
diversity.dtypes
diversity.plot(title = 'Number of popular names in top 50%')
    
    
    
 
    Out[80]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f08aa19a950>
In [81]:
    
get_last_letter = lambda x: x[-1]
last_letters = names.name.map(get_last_letter)
last_letters.name = 'last_letter'
table = names.pivot_table('births', index=last_letters, columns=['sex', 'year'], aggfunc=sum)
    
In [83]:
    
subtable = table.reindex(columns=[1910, 1960, 2010], level='year')
    
In [84]:
    
subtable.head()
    
    Out[84]:
  
    
      sex 
      F 
      M 
     
    
      year 
      1910 
      1960 
      2010 
      1910 
      1960 
      2010 
     
    
      last_letter 
       
       
       
       
       
       
     
  
  
    
      a 
      108398.0 
      691271.0 
      676151.0 
      977.0 
      5212.0 
      28837.0 
     
    
      b 
      NaN 
      694.0 
      454.0 
      411.0 
      3912.0 
      39229.0 
     
    
      c 
      5.0 
      49.0 
      954.0 
      482.0 
      15463.0 
      23325.0 
     
    
      d 
      6751.0 
      3728.0 
      2635.0 
      22113.0 
      262168.0 
      44780.0 
     
    
      e 
      133601.0 
      435056.0 
      316425.0 
      28665.0 
      178817.0 
      130130.0 
     
  
In [85]:
    
subtable.sum()
    
    Out[85]:
sex  year
F    1910     396503.0
     1960    2022121.0
     2010    1773440.0
M    1910     194216.0
     1960    2132756.0
     2010    1914629.0
dtype: float64
In [86]:
    
letter_prop = subtable / subtable.sum().astype(float)
    
In [87]:
    
fig, axes = plt.subplots(2, 1, figsize=(10, 8))
letter_prop['M'].plot(kind='bar', rot=0, ax=axes[0], title='Male')
letter_prop['F'].plot(kind='bar', rot=0, ax=axes[1], title='Female', legend=False)
    
    
    
 
    Out[87]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f08a9e0a110>
In [88]:
    
letter_prop = table / table.sum().astype(float)
    
In [89]:
    
dny_ts = letter_prop.ix[['d', 'n', 'y'], 'M'].T
    
In [90]:
    
dny_ts.head()
    
    Out[90]:
  
    
      last_letter 
      d 
      n 
      y 
     
    
      year 
       
       
       
     
  
  
    
      1880 
      0.083057 
      0.153217 
      0.075763 
     
    
      1881 
      0.083242 
      0.153212 
      0.077455 
     
    
      1882 
      0.085332 
      0.149561 
      0.077538 
     
    
      1883 
      0.084051 
      0.151653 
      0.079148 
     
    
      1884 
      0.086121 
      0.149926 
      0.080407 
     
  
In [91]:
    
dny_ts.plot()
    
    
    
 
    Out[91]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f08a996ba50>
In [92]:
    
all_names = top1000.name.unique()
    
In [93]:
    
mask = np.array(['lesl' in x.lower() for x in all_names])
    
In [94]:
    
lesley_like = all_names[mask]
    
In [97]:
    
np.array(['Leslie', 'Lesley', 'Leslee', 'Lesli', 'Lesly'], dtype=object)
    
    Out[97]:
array(['Leslie', 'Lesley', 'Leslee', 'Lesli', 'Lesly'], dtype=object)
In [98]:
    
filtered = top1000[top1000.name.isin(lesley_like)]
    
In [100]:
    
filtered.groupby('name').births.sum()
    
    Out[100]:
name
Leslee       993
Lesley     35032
Lesli        929
Leslie    376158
Lesly      11155
Name: births, dtype: int64
In [101]:
    
table = filtered.pivot_table('births', index='year', columns='sex', aggfunc='sum')
    
In [102]:
    
table = table.div(table.sum(1), axis=0)
    
In [103]:
    
table.tail()
    
    Out[103]:
  
    
      sex 
      F 
      M 
     
    
      year 
       
       
     
  
  
    
      2010 
      1.0 
      NaN 
     
    
      2011 
      1.0 
      NaN 
     
    
      2012 
      1.0 
      NaN 
     
    
      2013 
      1.0 
      NaN 
     
    
      2014 
      1.0 
      NaN 
     
  
In [104]:
    
table.plot(style={'M': 'k-', 'F': 'k--'})
    
    
    
 
    Out[104]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f08a9845790>
In [ ]:
    
    
Content source: batazor/MyExampleAndExperiments
Similar notebooks: